/**************************************************************************************************/
/**
 * @file     common_drv.h
 * @brief    Drv common module header file.
 * @version  V1.0.0
 * @date     December-2022
 * @author   Zhixin Semiconductor
 *
 * @note
 * Copyright (C) 2021-2023 Zhixin Semiconductor Ltd. All rights reserved.
 **************************************************************************************************/

#ifndef COMMON_DRV_H
#define COMMON_DRV_H

//包含需要的头文件
#include "platform_cfg.h"	// 包含MCU平台配置信息的头文件
#include "common_drv.h"		// 包含SDK中常用信息的头文件
#include "stdint.h"		    // 包含类型的宏定义



/**
 * @brief Control State Type Definition
 */
typedef enum
{
    DISABLE  = 0U,
    ENABLE   = 1U
}   ControlState_t;


/**
 * @brief Result status Type definition
 */
typedef enum
{
    SUCC = 0U,
    ERR = 1U,
    BUSY = 2U
}   ResultStatus_t;


/**
 * @brief Flag/Int status Type definition
 */
typedef enum
{
    RESET = 0U,
    SET = 1U
}   FlagStatus_t, IntStatus_t;


/**
 * @brief interrupt mask Type definition
 */
typedef enum
{
    UNMASK = 0U,
    MASK = 1U
}   IntMask_t;


/**
 * @brief level Type definition
 */
typedef enum
{
    LEVEL_LOW = 0U,
    LEVEL_HIGH = 1U
}   Level_t;


/**
 *  @brief ISR callback function type
 */
typedef void (isr_cb_t)(void);




/** @defgroup COMMON_ISR_INDEX
 *  @{
 */
#define IS_ISR_INDEX(INDEX)     ((INDEX) < ISR_INDEX_NUM)


/** @defgroup COMMON_INT_MASK
 *  @{
 */
#define IS_INTMASK(INTMASK)     (((INTMASK) == MASK) || ((INTMASK) == UNMASK))



/** @} end of group COMMON_Public_Macro */




/*****************************************************************************
 * 函数: COMMON_BytesToWord
 * 功能: Convert 4 byte into a word. The first byte is the lowest byte in the word(little end).
 * 参数: bytes: it points to an array with 4 bytes.
 * 返回: 合并后的 32bits 数值
 * 说明: 1，
****************************************************************************/
uint32_t COMMON_BytesToWord(uint8_t bytes[4]);


/*****************************************************************************
 * 函数: COMMON_Delay_us
 * 功能: 延时大约1毫秒函数
 * 参数:
 * 返回:
 * 说明: 1，在 Keil 中，当优化选项为“-O1”时：
 *			49200--在Z20K148M，160M的内核速度，延时大约1毫秒；
 *			6810--在Z20K148M，150M的内核速度，延时大约1毫秒；
 *			5455--在Z20K148M，120M的内核速度，延时大约1毫秒
 *		2，测试发现，Z20K148M处理32位数据的速度最快。
****************************************************************************/
#if( COMMON_DELAY_FUNC_IN_RAM == 1)
    START_FUNCTION_DECLARATION_RAMSECTION
    void COMMON_Delay_us(uint32_t t)
    END_FUNCTION_DECLARATION_RAMSECTION
#else
    void COMMON_Delay_us(uint32_t t);
#endif


/*****************************************************************************
 * 函数: COMMON_Delay_ms
 * 功能: 延时大约1毫秒函数
 * 参数:
 * 返回:
 * 说明: 1，在 Keil 中，当优化选项为“-O1”时：
 *			49200--在Z20K148M，160M的内核速度，延时大约1毫秒；
 *			6810--在Z20K148M，150M的内核速度，延时大约1毫秒；
 *			5455--在Z20K148M，120M的内核速度，延时大约1毫秒
 *		2，测试发现，Z20K148M处理32位数据的速度最快。
****************************************************************************/
#if( COMMON_DELAY_FUNC_IN_RAM == 1)
    START_FUNCTION_DECLARATION_RAMSECTION
    void COMMON_Delay_ms(uint32_t t)
    END_FUNCTION_DECLARATION_RAMSECTION
#else
    void COMMON_Delay_ms(uint32_t t);   
#endif







#endif /* COMMON_DRV_H */

